package dao;

import static org.junit.Assert.*;

import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

import modele.Personne;

import org.junit.Test;

public class TestPersonneDAO extends AgriotesDbTestCase {

	@Test
	public void testInserer() throws SQLException { // LireParId est aussi
													// tester
		Personne p = new Personne("Goapper", "Loïc", Date.valueOf("1980-10-10"),
				"0612345678", "87 av du République", "78010", "Paris",
				"loic@goapper.com", "654321");
		Personne p2 = null;
		PersonneDAO dao = new PersonneDAO();
		dao.inserer(p);
		p2 = dao.lireParId(p.getIdPersonne());		
		assertEquals(p, p2);
	}
	
	
	@Test
	public void testInsererAvecConnexion() throws SQLException { // LireParId est aussi
													// tester
		Connection con = FabriqueDAO.getConnection();
		con.setAutoCommit(false);
		Personne p = new Personne("Goapper", "Loïc", Date.valueOf("1980-10-10"),
				"0612345678", "87 av du République", "78010", "Paris",
				"loic@goapper.com", "654321");
		Personne p2 = null;
		PersonneDAO dao = new PersonneDAO();
		dao.inserer(p, con);
		con.commit();
		p2 = dao.lireParId(p.getIdPersonne());		
		assertEquals(p, p2);
	}

	@Test
	public void testModifier() throws SQLException {
		Personne p = new Personne("Goapper", "Loïc", Date.valueOf("1990-10-10"),
				"0612345678", "87 av du République", "78010", "Paris",
				"loic@goapper.com", "654321");
		PersonneDAO dao = new PersonneDAO();
		Personne p2 = null;
		Personne p3 = null;
		dao.inserer(p);
		p2 = p;
		p2.setPrenom("Toto");
		p2.setNom("Dupond");
		dao.modifier(p2);
		p3 = dao.lireParId(p2.getIdPersonne());		
		assertEquals(p2, p3);
	}

	@Test
	public void testSupprimer() throws SQLException {
		Personne p = new Personne("Dupond", "Toto", Date.valueOf("1990-01-01"), "0601010101",
				"3 rue java", "75000", "Paris", "toto@titi.fr", "555555");
		PersonneDAO dao = new PersonneDAO();
		dao.inserer(p);
		dao.supprimer(p.getIdPersonne());
		assertNull("Objet existe encore", dao.lireParId(p.getIdPersonne()));
	}
	
	
	@Test
	public void testLireParLoginPassword() throws SQLException {
		PersonneDAO dao = new PersonneDAO();
		Personne result = dao.lireParLoginPassword("francis@nadou.com", 
			"785659");
		Personne expected = new Personne(1, "Roary","Nadou",Date.valueOf("1990-08-06"),"0600415513","546-6761 Vitae, Street","44965","Nederokkerzeel","francis@nadou.com","785659");
		assertEquals(expected, result);
	}
	
	//@Test
	/*public void testLister() throws SQLException {

		PersonneDAO dao = new PersonneDAO();

		//s'il y a des foreign key constraints ca va echoue
		dao.deleteAll();

		Personne p1 = new Personne("dfqksdf", "Toto", new Date(02,01,1990), "0601010101", "3 rue java", "75000", "Nanterre", "toto@titi.fr", "555555");

		Personne p2 = new Personne("Dupond", "Toto", new Date(03,01,1990), "0601010101", "3 rue java", "75000", "Paris", "toto@titi.fr", "555555");

		//pas bon
		List<Personne> listLocal = null;
		listLocal.add(p1);
		listLocal.add(p2);
		
		//inserons notre liste
		for (Personne personne : listLocal) {
			dao.inserer(personne);
		}
		

		//recuperons liste de personne
		List<Personne> listBDD = dao.listerPersonne();

		for (int i = 0; i < listBDD.size(); i++) {
			
			Personne per = listBDD.get(i);
			//controler per avec listlocal 
			assertTrue("pas identique", per.equals(listLocal.get(i)));
		}
			

	}*/	
}
